//
//  MKUINavigationBarLayoutConstraint.h
//  MKUI
//  UINavigationBar的左中右布局管理器。
//  Created by 苏尚进 on 2025/4/6.
//  Copyright © 2025 moon. All rights reserved.
//

#import "MKUILayoutConstraint.h"
#import "MKUIFlowLayoutConstraint.h"
NS_ASSUME_NONNULL_BEGIN

@interface MKUINavigationBarLayoutConstraint : MKUILayoutConstraint

@property(nonatomic,strong,nullable) NSArray<id<MKUILayoutConstraintItemProtocol>> *headItems;//首部的元素
@property(nonatomic,strong,nullable) NSArray<id<MKUILayoutConstraintItemProtocol>> *centerItems;//中部的元素
@property(nonatomic,strong,nullable) NSArray<id<MKUILayoutConstraintItemProtocol>> *footItems;//尾部的元素

- (void)addHeadItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)removeHeadItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)replaceHeadItem:(id<MKUILayoutConstraintItemProtocol>)oldItem with:(nullable id<MKUILayoutConstraintItemProtocol>)newItem;//进行item的替换,如果items中元素为MKUILayoutConstraintItemWrapper话,会检查期origin是否==oldItem

- (void)addCenterItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)removeCenterItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)replaceCenterItem:(id<MKUILayoutConstraintItemProtocol>)oldItem with:(nullable id<MKUILayoutConstraintItemProtocol>)newItem;//进行item的替换,如果items中元素为MKUILayoutConstraintItemWrapper话,会检查期origin是否==oldItem

- (void)addFootItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)removeFootItem:(id<MKUILayoutConstraintItemProtocol>)item;
- (void)replaceFootItem:(id<MKUILayoutConstraintItemProtocol>)oldItem with:(nullable id<MKUILayoutConstraintItemProtocol>)newItem;//进行item的替换,如果items中元素为MKUILayoutConstraintItemWrapper话,会检查期origin是否==oldItem

@property(nonatomic,assign) MKUILayoutConstraintDirection layoutDirection;//布局方向.默认为MKUILayoutConstraintDirectionHorizontal
@property(nonatomic,assign) MKUILayoutConstraintVerticalAlignment layoutVerticalAlignment;//所有元素作为一个整体,在垂直方向上的位置,以及每一个元素在整体内的垂直方向上的对齐方式.默认为MKUILayoutConstraintVerticalAlignmentCenter

@property(nonatomic,assign) UIEdgeInsets contentInsets;//内边距,默认为(0,0,0,0)
@property(nonatomic,assign) CGFloat interitemSpacing;//元素间的间隔,默认为0

@property(nonatomic,assign) BOOL fixSizeToFitsBounds;//在计算sizeThatFits时,根据布局方向,自动固定对应边的尺寸为传入的 size 的边,(如水平布局时,sizeThatFits.width=size.width),默认为 YES,即固定
/**
 *  计算最合适的尺寸
 *
 *  @param size        外层限制
 *  @param resizeItems 是否计算子元素的最合适尺寸。YES：调用子元素的sizeThatFits方法。NO：直接使用子元素的bounds.size
 *
 *  @return 最合适的尺寸
 */
- (CGSize)sizeThatFits:(CGSize)size resizeItems:(BOOL)resizeItems;

/**
 *  对子元素进行布局
 *
 *  @param resizeItems 在布局前,是否让每个子元素自动调整到合适的尺寸
 */
- (void)layoutItemsWithResizeItems:(BOOL)resizeItems;
@end
NS_ASSUME_NONNULL_END
